package br.com.dallasmotopecas.compra.promocao.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.promocao.controller.PromocaoPremiacaoController;
import br.com.dallasmotopecas.comum.promocao.vo.PromocaoPremiacaoVo;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="managerPromocaoPremiacaoBean")
@ViewScoped
public class ManagerPromocaoPremiacaoBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private PromocaoPremiacaoVo promocaoPremiacaoVo;
	private List<PromocaoPremiacaoVo> listaPremiacao;
	
	public ManagerPromocaoPremiacaoBean()
	{
		
	}
	
	@PostConstruct
	public void initialize()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			carregarDados();
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		setPromocaoPremiacaoVo(null);
		
		if (getListaPremiacao() != null)
		{
			getListaPremiacao().clear();
			setListaPremiacao(null);
		}
	}
	
	public PromocaoPremiacaoVo getPromocaoPremiacaoVo()
	{
		if (promocaoPremiacaoVo == null) promocaoPremiacaoVo = new PromocaoPremiacaoVo();
		
		return promocaoPremiacaoVo;
	}

	public void setPromocaoPremiacaoVo(PromocaoPremiacaoVo promocaoPremiacaoVo)
	{
		this.promocaoPremiacaoVo = promocaoPremiacaoVo;
	}

	public List<PromocaoPremiacaoVo> getListaPremiacao()
	{
		if (listaPremiacao == null) listaPremiacao = new ArrayList<PromocaoPremiacaoVo>();
		
		return listaPremiacao;
	}

	public void setListaPremiacao(List<PromocaoPremiacaoVo> listaPremiacao)
	{
		this.listaPremiacao = listaPremiacao;
	}

	public void carregarDados()
	{
		PromocaoPremiacaoController promocaoPremiacaoController = null;
		try
		{
			promocaoPremiacaoController = new PromocaoPremiacaoController(getContexto());
			promocaoPremiacaoController.carregarListaPremiacao(getListaPremiacao());
		}
		catch(ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (promocaoPremiacaoController != null)
			{
				promocaoPremiacaoController.close();
				promocaoPremiacaoController = null;
			}
		}
	}
	
	public void novaPremiacao()
	{
		setPromocaoPremiacaoVo(new PromocaoPremiacaoVo());
		abrirModal("premiacaoDialog");
	}
	
	public void alterarPremiacao(PromocaoPremiacaoVo promocaoPremiacaoVo)
	{
		setPromocaoPremiacaoVo(promocaoPremiacaoVo);
		abrirModal("premiacaoDialog");
	}
	
	public void gravar()
	{
		PromocaoPremiacaoController promocaoPremiacaoController = null;
		try
		{
			promocaoPremiacaoController = new PromocaoPremiacaoController(getContexto());
			
			if (getPromocaoPremiacaoVo().getId() == 0)
				promocaoPremiacaoController.inserirPremiacao(getPromocaoPremiacaoVo());
			else
				promocaoPremiacaoController.alterarPremiacao(getPromocaoPremiacaoVo());
			
			carregarDados();
			
			fecharModal("premiacaoDialog");
			
		}
		catch(InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (promocaoPremiacaoController != null)
			{
				promocaoPremiacaoController.close();
				promocaoPremiacaoController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/compra/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
}
